package com.yeyks.dal.dao;

import com.yeyks.dal.domain.HotelInfo;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;

public interface HotelInfoMapper {
    int deleteByPrimaryKey(Integer id);

    int insert(HotelInfo record);

    HotelInfo selectByPrimaryKey(Integer id);

    List<HotelInfo> selectAll();

    int updateByPrimaryKey(HotelInfo record);

    int insertReturnId(HotelInfo record);

    List<HotelInfo> selectByCity(@Param("city") String city);

    List<HotelInfo> selectByOperator(@Param("operator") Integer operator);

    List<HotelInfo> selectByAdministrator(@Param("admin") Integer admin);

    List<HotelInfo> selectByAdministrators(@Param("admins") List<Integer> admins);

    List<Map> selectByUser(@Param("price") Integer price, @Param("city") String city,
                           @Param("addr") String addr, @Param("starLevel") Integer starLevel,
                           @Param("checkIn") String checkIn, @Param("checkOut") String checkOut,
                           @Param("positionX") Double positionX, @Param("positionY") Double positionY,
                           @Param("offset") Integer offset, @Param("maxrow") Integer maxrow,
                           @Param("order") Integer order);

    List<HotelInfo> selectByIds(@Param("ids") List<Integer> ids);

    List<HotelInfo> selectByFilters(@Param("status") Integer status, @Param("type") Integer type,
                                    @Param("starLevel") Integer starLevel, @Param("gmtModifiedStart") Date gmtModifiedStart,
                                    @Param("gmtModifiedEnd") Date gmtModifiedEnd, @Param("keyword") String keyword,
                                    @Param("offset") Integer offset, @Param("count") Integer count);

    List<Map> selectByFiltersEx(@Param("adminIds") List<Integer> adminIds, @Param("status") List<Integer> status,
                                @Param("type") Integer type, @Param("starLevel") Integer starLevel,
                                @Param("gmtModifiedStart") Date gmtModifiedStart, @Param("gmtModifiedEnd") Date gmtModifiedEnd,
                                @Param("keyword") String keyword, @Param("offset") Integer offset,
                                @Param("count") Integer count, @Param("userType") Integer userType);

    int selectByFiltersExCount(@Param("adminIds") List<Integer> adminIds, @Param("status") List<Integer> status,
                               @Param("type") Integer type, @Param("starLevel") Integer starLevel,
                               @Param("gmtModifiedStart") Date gmtModifiedStart, @Param("gmtModifiedEnd") Date gmtModifiedEnd,
                               @Param("keyword") String keyword, @Param("userType") Integer userType);

    int updateStatusByIds(@Param("ids") List<Integer> ids, @Param("status") Integer status, @Param("extraInfo") String extraInfo);

    int updateValidByIds(@Param("ids") List<Integer> ids, @Param("valid") Boolean status);

    int updateIfNotNullByPrimaryKey(HotelInfo record);

    int countByAdminIds(@Param("ids") List<Integer> ids, @Param("dtStart") Date dtStart, @Param("dtEnd") Date dtEnd);

    List<Map> countGroupByCityMgr(@Param("id") Integer id);

    List<Map> countGroupByBranch();

    int updateScore(@Param("id") Integer id);

    List<Map> searchHotel(Map<String, Object> map);

    Integer searchHotelCount(Map<String, Object> map);

    int deleteById(@Param("id") Integer id, @Param("isDel") Integer isDel);

    List<Map> searchHotelNew(Map<String, Object> map);

    List<Map> searchHotelV2(Map<String, Object> map);

    List<Map> searchHotelNoPrice(Map<String, Object> map);

    List<Map> searchHotelNoPriceV2(Map<String, Object> map);
}